package edu.uoc.tdp.client.proves;
import edu.uoc.tdp.beans.conexio.ResponsableEvents;
import edu.uoc.tdp.beans.proves.EstatProva;
import edu.uoc.tdp.beans.proves.PreguntaResposta;
import edu.uoc.tdp.beans.proves.Prova;
import edu.uoc.tdp.beans.proves.Ronda;
import edu.uoc.tdp.beans.proves.RondaEliminatoria;
import edu.uoc.tdp.beans.proves.RondaFinal;
import edu.uoc.tdp.common.EOlympicsException;
import edu.uoc.tdp.common.EOlympicsUtils;
import edu.uoc.tdp.common.RemotProvesInterface;
import edu.uoc.tdp.common.TDSLanguageUtils;
import java.awt.Font;
import java.awt.event.WindowEvent;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.JPopupMenu.Separator;
import javax.swing.border.TitledBorder;
import javax.swing.text.MaskFormatter;
/**
 * Pantalla que gestiona la edicio i/o visualtizació d'una prova.<br>
 * Serveix per donar d'alta / Baixa les proves i les seves rondes.<br>
 * També un com creades es poden visualitzar.
 * 
 * @author Grup TDP 1X4J
 */
public class PanelMantenimentGestioProves extends JFrame {
    private JButton jBBuscarProva;private JButton jBCancelarProva;  private JButton jBSortir;
    private JButton jBCrearProva2;private JButton jBGuardarProva;private JLabel jLDataAlta;
    private JButton jBCrearProva;   
    private JLabel jLDataBaixa;  private JLabel jLDataModificacio;private JLabel jLDescripcio;  
    private JLabel jLEsborradaE;private JLabel jLEsborradaF;private JLabel jLEstat;
    private JLabel jLEstatLabel;private JLabel jLFinsE;private JLabel jLFinsF; private JLabel jLInscripcio;
    private JLabel jLInscripcioDe;private JLabel jLInscripcioFins;private JLabel jLModificadaE;
    private JLabel jLModificadaF;private JLabel jLNPreguntesE;private JLabel jLNPreguntesF;    
    private JLabel jLNombrePlaces;private JLabel jLRealitzacioE;private JLabel jLRealitzacioF;    
    private JLabel jLdeE;private JLabel jLdeEF;
    private JMenuBar jPanellMenu;private JMenu jMenuArxiu; private JMenu jMenuEdicio;
    private JMenuItem jMenuItemNova,jMenuItemEditar,jMenuItemBorrar,jMenuItemGuardar,jMenuItemBuscar,jMenuItemSortir;
    private Separator separador1,separador2;    
    private JPanel jPButtons;private JPanel jPanelProva;private JPanel jPanelEliminatoria;private JPanel jPanelFinal;        
    private JScrollPane jScrollPaneE;private JScrollPane jScrollPaneF;   
    private JTextField jTDescripcio;private JTextField jTFiInscripcio;private JTextField jTIniInscripcio;    
    private JTextField jTIniRealitzacioE;private JTextField jTIniRealitzacioF;
    private JTextField jTFiRealitzacioE;private JTextField jTFiRealitzacioF;
    
    private JLabel jTEsborradaE;private JLabel jTEsborradaF;
    private JLabel jTModificadaE;private JLabel jTModificadaF;
    private JLabel jTextDataAlta;private JLabel jTextDataBaixa;private JLabel jTextDataModificacio;
    
    private JComboBox jTNombrePlaces;private JComboBox jTNPreguntesE;private JComboBox jTNPreguntesF;
    
    private JTable jTableE;private JTable jTableF;
    
    private Font fontEtiqueta;private Font fontText;private Font fontTaula;private Font fontCapa;
    private Font fontBoto;
    private final int ampleCombo=50;private final int altCombo=20;
    private final int ampleBoto=65; private final int altBoto=30;
    
    private RemotProvesInterface remotProves;
    private Prova prova;
    private RondaEliminatoria rondaEliminatoria=null;
    private RondaFinal rondaFinal=null;
    
    private Integer maxPreguntes =20;
    private Integer minPreguntes =3;
    private boolean carregaHabilitada=false; 
    
    
    private ResponsableEvents usuari;
    
    private String tempDate;
    
   
    /**
     * Constructor per defecte.     
     * 
     * @throws ParseException       
     */
    public PanelMantenimentGestioProves() throws ParseException{        
        fontEtiqueta=new Font("Tahoma", 0, 12);
        fontText=new Font("Tahoma", 0, 12);
        fontTaula=new Font("Tahoma", 0, 12);
        fontCapa=new Font("Tahoma", 0, 15);
        fontBoto= new Font("Tahoma", 0, 11);        
        this.setTitle(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.titol"));
        initComponents();
        borrarDades();       
        setPanellMenu();
        setPanellBotons();        
        setPanellProva();
        setFinestra();        
        pintarEtiquetes();        
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        addWindowListener(new java.awt.event.WindowAdapter() {            
            public void windowClosing(java.awt.event.WindowEvent evt) {
                tancarFinestra(evt);
            }
        });
        
    }
    /**
     * Constructor amb un paràmetre.
     * @param prova                     Prova a visualitzar
     * @throws ParseException 
     */
     public PanelMantenimentGestioProves(Prova prova) throws ParseException {        
         this();
         this.prova=prova;  
         if(prova.getRondaEliminatoria()!=null){
            if(prova.getRondaEliminatoria().getDataBaixa()==null){
                rondaEliminatoria=prova.getRondaEliminatoria();
            }
        }
        if (prova.getRondaFinal()!=null){
            if(prova.getRondaFinal().getDataBaixa()==null){
                rondaFinal=prova.getRondaFinal();
            }    
        }         
         habilitarControls(false);
         carregarProva();
         if(this.prova.getIdProva()==-1) ActionCrearProva2(null);
         pack();         
     }
     /**
      * Constructor amb dos paràmetres
      * @param prova                    Prova a visualitzar
      * @param pusuari                  Usuari actual
      * @throws ParseException 
      */
      public PanelMantenimentGestioProves(Prova prova, ResponsableEvents pusuari) throws ParseException {        
        this(prova);        
        this.usuari=pusuari;                
    }    
    /**
       * Constructor amb 3 paràmetres <BR>
       * Es el que es fa servir via remot
       * @param prova               Prova a visualtizar
       * @param remotProves         Servidor per donar servei via remot
       * @param pusuari             usuari actual
       * @throws ParseException 
       */
    public PanelMantenimentGestioProves(Prova prova, RemotProvesInterface remotProves, ResponsableEvents pusuari) throws ParseException {        
        this(prova);        
        this.remotProves=remotProves;
        this.usuari=pusuari;        
    }    
    /**
     * Procediment que inicialitza tots els components gràfics de la pantalla
     * @throws ParseException 
     */
    private void initComponents() throws ParseException {                       
        jPButtons = new JPanel();
        jBCrearProva = new JButton();
        jBCancelarProva = new JButton();
        jBCrearProva2 = new JButton();
        jBGuardarProva = new JButton();
        jBBuscarProva = new JButton();
       // jBTancarProva = new JButton();
        jBSortir = new JButton();
        jPanelProva = new JPanel();
        jLDescripcio = new JLabel();
        jTDescripcio = new JTextField();
        jLNombrePlaces = new JLabel();
        jTNombrePlaces = new JComboBox();
        jLEstatLabel = new JLabel();
        jLEstat = new JLabel();
        jLInscripcio = new JLabel();
        jLInscripcioDe = new JLabel();        
        jTIniInscripcio = new JFormattedTextField(new MaskFormatter("##/##/####"));  
        jLInscripcioFins = new JLabel();
        jTFiInscripcio = new JFormattedTextField(new MaskFormatter("##/##/####"));  
        jTextDataAlta = new JLabel();
        jLDataAlta = new JLabel();
        jLDataModificacio = new JLabel();
        jTextDataModificacio = new JLabel();
        jLDataBaixa = new JLabel();
        jTextDataBaixa = new JLabel();
        jPanelEliminatoria = new JPanel();
        jLNPreguntesE = new JLabel();
        jTNPreguntesE = new JComboBox();  
        jLRealitzacioE = new JLabel();        
        jTIniRealitzacioE = new JFormattedTextField(new MaskFormatter("##/##/####"));  
        jTFiRealitzacioE = new JFormattedTextField(new MaskFormatter("##/##/####"));  
        jLFinsE = new JLabel();
        jLdeE = new JLabel();
        jLModificadaE = new JLabel();
        jTModificadaE = new JLabel();
        jTEsborradaE = new JLabel();
        jLEsborradaE = new JLabel();
        jScrollPaneE = new JScrollPane();
        jTableE = null;
        jPanelFinal = new JPanel();
        jLNPreguntesF = new JLabel();
        jTNPreguntesF = new JComboBox();  
        jLRealitzacioF = new JLabel();
        jTIniRealitzacioF = new JFormattedTextField(new MaskFormatter("##/##/####"));  
        jTFiRealitzacioF = new JFormattedTextField(new MaskFormatter("##/##/####"));  
        jLFinsF = new JLabel();
        jLdeEF = new JLabel();
        jLModificadaF = new JLabel();
        jTModificadaF = new JLabel();
        jTEsborradaF = new JLabel();
        jLEsborradaF = new JLabel();
        jScrollPaneF = new JScrollPane();
        usuari=new ResponsableEvents();
        jTableF = null;     
        jPanellMenu = new JMenuBar();
        jMenuArxiu = new JMenu();
        jMenuEdicio= new JMenu();
        jMenuItemNova = new JMenuItem();
        jMenuItemEditar = new JMenuItem();
        jMenuItemBorrar = new JMenuItem();
        jMenuItemGuardar = new JMenuItem();
        jMenuItemBuscar = new JMenuItem();
        jMenuItemSortir = new JMenuItem();
        separador1= new Separator();
        separador2= new Separator();
                
        jLDescripcio.setFont(fontEtiqueta);jLDescripcio.setHorizontalAlignment(SwingConstants.RIGHT);                
        jTDescripcio.setFont(fontText);jTDescripcio.setHorizontalAlignment(SwingConstants.LEFT);        
        jLNombrePlaces.setFont(fontEtiqueta);jLNombrePlaces.setHorizontalAlignment(SwingConstants.RIGHT);        
        jTNombrePlaces.setFont(fontText); 
        jLEstatLabel.setFont(fontEtiqueta); jLEstatLabel.setHorizontalAlignment(SwingConstants.RIGHT);        
        jLEstat.setFont(fontCapa);jLEstat.setHorizontalAlignment(SwingConstants.CENTER); jLEstat.setForeground(java.awt.SystemColor.activeCaption);        
        jLInscripcio.setFont(fontEtiqueta);jLInscripcio.setHorizontalAlignment(SwingConstants.RIGHT);        
        jLInscripcioDe.setFont(fontEtiqueta); jLInscripcioDe.setHorizontalAlignment(SwingConstants.RIGHT);        
        jTIniInscripcio.setFont(fontEtiqueta);jTIniInscripcio.setHorizontalAlignment(JTextField.CENTER);
        jLInscripcioFins.setFont(fontEtiqueta); jLInscripcioFins.setHorizontalAlignment(SwingConstants.RIGHT);        
        jTFiInscripcio.setFont(fontText); jTFiInscripcio.setHorizontalAlignment(JTextField.CENTER);        
        jTextDataAlta.setFont(fontText); jTextDataAlta.setHorizontalAlignment(JTextField.CENTER);        
        jLDataAlta.setFont(fontEtiqueta);jLDataAlta.setHorizontalAlignment(SwingConstants.RIGHT);        
        jLDataModificacio.setFont(fontEtiqueta);jLDataModificacio.setHorizontalAlignment(SwingConstants.RIGHT);        
        jTextDataModificacio.setFont(fontText);jTextDataModificacio.setHorizontalAlignment(JTextField.CENTER);        
        jLDataBaixa.setFont(fontEtiqueta);jLDataBaixa.setHorizontalAlignment(SwingConstants.RIGHT);        
        jTextDataBaixa.setFont(fontText);jTextDataBaixa.setHorizontalAlignment(JTextField.CENTER);  
        //eliminatoria        
        jLNPreguntesE.setFont(fontEtiqueta);jLNPreguntesE.setHorizontalAlignment(SwingConstants.RIGHT);        
        jTNPreguntesE.setFont(fontText);                
        jLRealitzacioE.setFont(fontEtiqueta);jLRealitzacioE.setHorizontalAlignment(SwingConstants.RIGHT);        
        jTIniRealitzacioE.setFont(fontText);jTIniRealitzacioE.setHorizontalAlignment(JTextField.CENTER);
        jTFiRealitzacioE.setFont(fontText); jTFiRealitzacioE.setHorizontalAlignment(JTextField.CENTER);
        jLFinsE.setFont(fontEtiqueta);jLFinsE.setHorizontalAlignment(SwingConstants.RIGHT);
        jLdeE.setFont(fontEtiqueta);jLdeE.setHorizontalAlignment(SwingConstants.RIGHT);
        jLModificadaE.setFont(fontEtiqueta);jLModificadaE.setHorizontalAlignment(SwingConstants.RIGHT);
        jTModificadaE.setFont(fontText);jTModificadaE.setHorizontalAlignment(JTextField.CENTER);
        jTEsborradaE.setFont(fontText);jTEsborradaE.setHorizontalAlignment(JTextField.CENTER);        
        jLEsborradaE.setFont(fontEtiqueta);jLEsborradaE.setHorizontalAlignment(SwingConstants.RIGHT); 
        //final
        jLNPreguntesF.setFont(fontEtiqueta); jLNPreguntesF.setHorizontalAlignment(SwingConstants.RIGHT);
        jTNPreguntesF.setFont(fontText);         
        jLRealitzacioF.setFont(fontEtiqueta);jLRealitzacioF.setHorizontalAlignment(SwingConstants.RIGHT);
        jTIniRealitzacioF.setFont(fontText);jTIniRealitzacioF.setHorizontalAlignment(JTextField.CENTER);
        jTFiRealitzacioF.setFont(fontText);jTFiRealitzacioF.setHorizontalAlignment(JTextField.CENTER);
        jLFinsF.setFont(fontEtiqueta);jLFinsF.setHorizontalAlignment(SwingConstants.RIGHT);
        jLdeEF.setFont(fontEtiqueta);jLdeEF.setHorizontalAlignment(SwingConstants.RIGHT);
        jLModificadaF.setFont(fontEtiqueta);jLModificadaF.setHorizontalAlignment(SwingConstants.RIGHT);
        jTModificadaF.setFont(fontText);jTModificadaF.setHorizontalAlignment(JTextField.CENTER);
        jTEsborradaF.setFont(fontText);jTEsborradaF.setHorizontalAlignment(JTextField.CENTER);
        jLEsborradaF.setFont(fontEtiqueta);jLEsborradaF.setHorizontalAlignment(SwingConstants.RIGHT);
        
        jBGuardarProva.setFont(fontBoto);
        jBCrearProva.setFont(fontBoto);
        jBCrearProva2.setFont(fontBoto);
        jBBuscarProva.setFont(fontBoto);
        jBSortir.setFont(fontBoto);
        jBCancelarProva.setFont(fontBoto);
        
        //listenets
        jTNombrePlaces.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {                                               
                    jTNombrePlacesChange(evt);                
            }            
            
        });
        
        jTNPreguntesE.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTNPreguntesEChange(evt);
            }
        });
        
        jTNPreguntesF.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTNPreguntesFChange(evt);
            }
        });
        jTDescripcio.addFocusListener(new java.awt.event.FocusAdapter() {
            @Override
           
            public void focusLost(java.awt.event.FocusEvent evt) {
                if(jTDescripcio.getText().equals("")){
                    jBGuardarProva.setEnabled(false);
                    jMenuItemGuardar.setEnabled(false);
                }else {
                    if(prova.getEstat().equals(EstatProva.INICIAL.getEstat())) {
                        if(jTNombrePlaces.getSelectedIndex()> -1 ){
                             jBGuardarProva.setEnabled(true);
                            jMenuItemGuardar.setEnabled(true);
                         }                 
                     }
                }
                
            }
        });    
       //LISTENERS DATES, ABANS D'AGAFAR EL FOCUS, RECUPEREM EL VALOR. 
        //ini inscricpico
        jTIniInscripcio.addFocusListener(new java.awt.event.FocusAdapter() {
            @Override
            public void focusGained(java.awt.event.FocusEvent evt) {
                getFocusDate(evt);
            } 
            public void focusLost(java.awt.event.FocusEvent evt) {
                lostFocusDate(evt);
            }
        });        
        //fiinscripcio
        jTFiInscripcio.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                getFocusDate(evt);
            }  
            public void focusLost(java.awt.event.FocusEvent evt) {
                lostFocusDate(evt);
            }
        });
        jTIniRealitzacioE.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                getFocusDate(evt);
            }  
            public void focusLost(java.awt.event.FocusEvent evt) {
                lostFocusDate(evt);
            }
        });
        jTFiRealitzacioE.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                getFocusDate(evt);
            }  
            public void focusLost(java.awt.event.FocusEvent evt) {
                lostFocusDate(evt);
            }
        });
        jTIniRealitzacioF.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                getFocusDate(evt);
            }  
            public void focusLost(java.awt.event.FocusEvent evt) {
                lostFocusDate(evt);
            }
        });
        jTFiRealitzacioF.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                getFocusDate(evt);
            }  
            public void focusLost(java.awt.event.FocusEvent evt) {
                lostFocusDate(evt);
            }
        });
        
         jBBuscarProva.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {                
                ActionBuscador(evt);                
            }
        });
         
        jBCancelarProva.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ActionCancelarProva(evt);
            }
        }); 
        jBSortir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tancarFinestra1(evt);
            }
        }); 
        jBCrearProva.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                try {
                    ActionCrearProva(evt);
                } catch (ParseException ex) {
                    
                }
            }
        }); 
        jBCrearProva2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ActionCrearProva2(evt);
            }
        });
         jBGuardarProva.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ActionGuardarProva(evt);
            }
        });        
         
    }
    /**
     * OPeració per carregar una taula on es visualitzen les rondes
     * @param nPreguntes            Nombre de preguntes que cal carregar
     * @return ModelDades           Model de dades en que es carrega la taula
     */
    private modelDadesPreguntaResposta carregarTaula(Integer nPreguntes){
        String [] columnes={"Pregunta","A","B","C","D"};        
          Object[][] dades=new Object[nPreguntes][5];                          
        modelDadesPreguntaResposta dadesTaula;
          for(int i=0;i<nPreguntes;i++){
          //  ButtonGroup bG=new ButtonGroup();
            for(int j=0; j<5;j++){
                if(j==0){
                    dades[i][j]=i+1+"";    
                }
                else{                    
                    dades[i][j]=new Boolean(false);                   
                }                
            }                        
        }        
        dadesTaula=new modelDadesPreguntaResposta(columnes,dades,EstatProva.INICIAL);
        return dadesTaula;        
    }    
    
    private void getFocusDate(java.awt.event.FocusEvent evt){
        /*if(evt.getComponent().equals(jTIniInscripcio)){
            tempDate=jTIniInscripcio.getText();
        }else if(evt.getComponent().equals(jTFiInscripcio)){
            tempDate=jTFiInscripcio.getText();
        }*/
    }

    /**
     * Acció que passa quan es perd el focus qualsevol camp que emmagatzema una data<BR>
     * Comprova que la data introduida compleix amb les restriccions del Negoci
     * @param evt               disparador que l'executa
     */
    private void lostFocusDate(java.awt.event.FocusEvent evt){
       JTextField txt=new JTextField();     
        try{
            txt=(JTextField) evt.getComponent();
            if(!"  /  /    ".equals(txt.getText())){
                if(!EOlympicsUtils.validarDate(txt.getText())){
                    throw new EOlympicsException (TDSLanguageUtils.getMessage("ERR_DATE"));
                }
            }
            
            checkDate(txt);
          
        }catch (ParseException pe){
                txt.setText("");
                JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("ERR_DATE"), TDSLanguageUtils.getMessage("ERR_CAPTION_DATA"), JOptionPane.ERROR_MESSAGE);                                
                txt.requestFocus();
        }catch (EOlympicsException ex){
                txt.setText("");
                JOptionPane.showMessageDialog(null, ex.getMessage(), TDSLanguageUtils.getMessage("ERR_CAPTION_DATA"), JOptionPane.ERROR_MESSAGE);                                
                txt.requestFocus();
        }
        
    }
    /**
     * OPeració que valida una data
     * @param txt                   Camp de texte 
     * @throws ParseException
     * @throws EOlympicsException 
     */
    private void checkDate(JTextField txt) throws ParseException,  EOlympicsException{        
        if(!"  /  /    ".equals(txt.getText())){                             
            if(EOlympicsUtils.getDate(txt.getText()).before(new java.sql.Date(System.currentTimeMillis()))){                
                throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_DATA_INIINSCRIPCIO"));                
            
            }else if(txt.equals(jTIniInscripcio)){
                if(!checkDates(jTIniInscripcio,jTFiInscripcio))
                    throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_DATA_FIINSCRIPCIO"));
                    
            } else if(txt.equals(jTFiInscripcio)){
                if(!checkDates(jTIniInscripcio,jTFiInscripcio))
                    throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_DATA_FIINSCRIPCIO"));
                    
                if(!checkDates(jTFiInscripcio,jTIniRealitzacioE))
                    throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_DATA_INICLASSIFICACIOE"));
                    
                if(!checkDates(jTFiInscripcio,jTIniRealitzacioF))
                    
                   throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_DATA_INICLASSIFICACIOF1")); 
            }else if(txt.equals(jTIniRealitzacioE)){                
                if(!checkDates(jTFiInscripcio,jTIniRealitzacioE))
                    
                    throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_DATA_INICLASSIFICACIOE"));
                if(!checkDates(jTIniRealitzacioE,jTFiRealitzacioE))
                    
                    throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_DATA_FICLASSIFICACIOE"));
            }else if(txt.equals(jTFiRealitzacioE)){                                
                if(!checkDates(jTIniRealitzacioE,jTFiRealitzacioE))
                    
                    throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_DATA_FICLASSIFICACIOE"));
                if(!checkDates(jTFiRealitzacioE,jTIniRealitzacioF))
                    
                    throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_DATA_INICLASSIFICACIOF2"));
            }else if(txt.equals(jTIniRealitzacioF)){                                
                if(!checkDates(jTFiInscripcio,jTIniRealitzacioF))
                    throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_DATA_INICLASSIFICACIOF1"));
                if(!checkDates(jTFiRealitzacioE,jTIniRealitzacioF))
                    throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_DATA_INICLASSIFICACIOF2"));
                    
                if(!checkDates(jTIniRealitzacioF,jTFiRealitzacioF))
                    
                    throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_DATA_FICLASSIFICACIOF"));
            }else if(txt.equals(jTFiRealitzacioF)){                                
                if(!checkDates(jTIniRealitzacioF,jTFiRealitzacioF))
                    
                    throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_DATA_FICLASSIFICACIOF"));
            }                     
        }        
    } 
    /**
     * Operacio que valida dos dates entre si 
     * @param txt1                  Camp de texte que conté Data inici  
     * @param txt2                  Camp de texte que conté Data final
     * @return
     * @throws ParseException
     * @throws EOlympicsException 
     */
    private boolean checkDates(JTextField txt1, JTextField txt2) throws ParseException, EOlympicsException{
        boolean check=true;
        if(!"  /  /    ".equals(txt1.getText())&&!"  /  /    ".equals(txt2.getText())){
            if(EOlympicsUtils.getDate(txt1.getText()).after(EOlympicsUtils.getDate(txt2.getText()))){
                check=false;
            }
        }
        
        return check;
    }
    /**
     * Operació que valida l'estat d'una ronda Eliminatoria
     * @return  cert si està habilitada, fals en cas contrari
     */
    private boolean checkRondaEliminatoria(){
        boolean check=true;
        if(prova.getEstat().equals(EstatProva.INICIAL.getEstat())){
            if (rondaEliminatoria!=null){
                if( rondaEliminatoria.getDataBaixa()!=null) check=false;        
            }            
        }else{
            if (rondaEliminatoria==null) check=false;
            //else if( rondaEliminatoria.getDataBaixa()!=null) check=false;        
        }
        return check;
    }
    /**
     * OPeració que valida l'estat d'una ronda final
     * @return cert si està habilitada, fals en cas contrari
     */
    private boolean checkRondaFinal(){
        boolean check=true;
        if(prova.getEstat().equals(EstatProva.INICIAL.getEstat())){
            if(rondaFinal!=null){
                if(rondaFinal.getDataBaixa()!=null)check=false;
            }
        }else{
            if (rondaFinal==null) check=false;
            //else if( rondaFinal.getDataBaixa()!=null) check=false;
        }
        
        return check;
    }
    /**
     * Acció que passa quan el nombre de places varia
     * @param evt               Disparador que l'executa
     */
    private void  jTNombrePlacesChange(java.awt.event.ActionEvent evt) {
          //if(carregaHabilitada){                    
            if(true){
                    if(jTNombrePlaces.getSelectedIndex()>=8 && checkRondaEliminatoria()){ 
                        //ini modificacio
                        if (rondaEliminatoria==null) rondaEliminatoria=new RondaEliminatoria();
                        try {
                            setPanellRonda(jPanelEliminatoria,jScrollPaneE,jLNPreguntesE,jTNPreguntesE,jLEsborradaE, jLModificadaE,jLRealitzacioE, jLdeE, jTIniRealitzacioE,jLFinsE, jTFiRealitzacioE, jTModificadaE,jTEsborradaE);
                         } catch (ParseException ex) {
                            System.out.println("error a carrega el pannell eliminatoria: "+ ex.getMessage());
                         }
                        jTNPreguntesE.setModel(carregarCombo(minPreguntes,maxPreguntes));                                     
                        
                        if(jTNombrePlaces.isEnabled()){
                            jTNPreguntesE.setEditable(true);                                                                
                            jTNPreguntesE.setEnabled(true);                     
                        }
                       
                        
                        jTIniRealitzacioE.setText(EOlympicsUtils.getStringDate(rondaEliminatoria.getDataIniRealitzacio())); 
                        jTFiRealitzacioE.setText(EOlympicsUtils.getStringDate(rondaEliminatoria.getDataFiRealitzacio())); 
                        jTEsborradaE.setText(EOlympicsUtils.getStringDate(rondaEliminatoria.getDataBaixa()));
                        jTModificadaE.setText(EOlympicsUtils.getStringDate(rondaEliminatoria.getDataModificacio()));             
                        jTNPreguntesE.setSelectedItem(rondaEliminatoria.getNombrePreguntes());             
                        if (rondaEliminatoria.getRespostesRonda()!=null)carregarPreguntesRonda(rondaEliminatoria);                          
                        jPanelEliminatoria.setBorder(BorderFactory.createTitledBorder(null,TDSLanguageUtils.getMessage("proves.pantalla.manteniment.titoltext.jPanelEliminatoria"),
                               TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, fontCapa));                                                                          
                        
                        //jTableE.setEnabled(true);
                        
                        jPanelEliminatoria.setBorder(BorderFactory.createTitledBorder(null,TDSLanguageUtils.getMessage("proves.pantalla.manteniment.titoltext.jPanelEliminatoria"),
                                 TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, fontCapa));                                     
                                                                                                   
                    }else{                     
                      
                        rondaEliminatoria=null;
                        //jPanelEliminatoria.setEnabled(false);             
                        jTNPreguntesE.setSelectedIndex(-1);             
                        jTEsborradaE.setText("");
                        jTModificadaE.setText("");
                        jPanelEliminatoria.setBorder(BorderFactory.createTitledBorder(null,TDSLanguageUtils.getMessage("proves.pantalla.manteniment.titoltext.jPanelEliminatoriainnactiva"),
                                                                 TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, fontCapa));                                                
                         
                        jTableE=new JTable();
                        jScrollPaneE.setViewportView(jTableE);
                        
                        jTNPreguntesE.setSelectedIndex(-1);
                        jTIniRealitzacioE.setText("");
                        jTFiRealitzacioE.setText("");
                        jTIniRealitzacioE.setEnabled(false);
                        jTFiRealitzacioE.setEnabled(false);
                    //    jTableE.setEnabled(false);                     
                        jTNPreguntesE.setEnabled(false); 
                        jTNPreguntesE.setEditable(false);
                    }
                    if(jTNombrePlaces.getSelectedIndex()>=0 && checkRondaFinal()){                       
                           if(rondaFinal==null) rondaFinal =new RondaFinal();
                        
                           try {
                                setPanellRonda(jPanelFinal,jScrollPaneF,jLNPreguntesF,jTNPreguntesF,jLEsborradaF, jLModificadaF,jLRealitzacioF, jLdeEF, jTIniRealitzacioF,jLFinsF, jTFiRealitzacioF, jTModificadaF,jTEsborradaF);
                            } catch (ParseException ex) {
                                   System.out.println("error a carrega el pannell final: "+ ex.getMessage());
                            }
                           if(jTNombrePlaces.isEnabled()){
                               jTNPreguntesF.setEditable(true);
                               jTNPreguntesF.setEnabled(true);
                           }
                           jTNPreguntesF.setModel(carregarCombo(minPreguntes,maxPreguntes));                        
                           
                                                      
                           jTFiRealitzacioF.setText(EOlympicsUtils.getStringDate(rondaFinal.getDataFiRealitzacio()));    
                           jTIniRealitzacioF.setText(EOlympicsUtils.getStringDate(rondaFinal.getDataIniRealitzacio()));
                           jTEsborradaF.setText(EOlympicsUtils.getStringDate(rondaFinal.getDataBaixa()));             
                           jTModificadaF.setText(EOlympicsUtils.getStringDate(rondaFinal.getDataModificacio()));             
                           jTNPreguntesF.setSelectedItem(rondaFinal.getNombrePreguntes());                      
                           if(rondaFinal.getRespostesRonda()!=null)carregarPreguntesRonda(rondaFinal);                                   
                           jPanelFinal.setBorder(BorderFactory.createTitledBorder(null,TDSLanguageUtils.getMessage("proves.pantalla.manteniment.titoltext.jPanelFinal"),
                                                                 TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, fontCapa));                                     
                           jPanelFinal.setBorder(BorderFactory.createTitledBorder(null,TDSLanguageUtils.getMessage("proves.pantalla.manteniment.titoltext.jPanelFinal"),
                                                 TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, fontCapa));                                     
                          if(prova.getEstat().equals(EstatProva.INICIAL.getEstat()) && !jTDescripcio.getText().equals("")) {                             
                                 jBGuardarProva.setEnabled(true);
                                 jMenuItemGuardar.setEnabled(true);                                            
                           }
                    }
                    else{
                        rondaFinal=null;    
                      
                        jPanelFinal.setBorder(BorderFactory.createTitledBorder(null,TDSLanguageUtils.getMessage("proves.pantalla.manteniment.titoltext.jPanelFinalinnactiva"),
                                                 TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, fontCapa));                                     

                        jTIniRealitzacioF.setEnabled(false);
                        jTFiRealitzacioF.setEnabled(false);
                        jTNPreguntesF.setSelectedIndex(-1);  
                        jTIniRealitzacioF.setText("");
                        jTFiRealitzacioF.setText("");                                                
                       // jPanelFinal.setEnabled(false);                             
                        jTEsborradaF.setText("");
                        jTModificadaF.setText("");
                        jTNPreguntesF.setSelectedIndex(-1);             
                        jTNPreguntesF.setEnabled(false); 
                        jTableF=new JTable();
                        
                        jScrollPaneF.setViewportView(jTableF);
                        jTableF.setEnabled(false);
                           
                    }
                 
                }
                      
    }
    /**
     * Acció que passa quan el nombre de preguntes d'una ronda eliminatoria canvia
     * @param evt               Disparador que l'executa
     */        
    private void jTNPreguntesEChange(java.awt.event.ActionEvent evt) {
        jTableE=null;
        if(jTNPreguntesE.getSelectedIndex()>=0){           
                jTableE= new JTable(carregarTaula(Integer.parseInt(jTNPreguntesE.getSelectedItem().toString())));                                
                //if(!jBCrearProva2.isEnabled() && prova.getEstat().equals(EstatProva.INICIAL.getEstat())){
                  if (jTNPreguntesE.isEnabled()&&jTNPreguntesE.isEditable()){
                    jTIniRealitzacioE.setEditable(true);
                    jTFiRealitzacioE.setEditable(true);                
                    jTIniRealitzacioE.setEnabled(true); 
                    jTFiRealitzacioE.setEnabled(true);
                }else{
                    jTIniRealitzacioE.setEnabled(false);
                    jTFiRealitzacioE.setEnabled(false); 
                    jTIniRealitzacioE.setEditable(false);
                    jTFiRealitzacioE.setEditable(false);                
                }
                
               
                
        }else{                
                jTableE= new JTable(carregarTaula(0));                                
                jTIniRealitzacioE.setEditable(false);
                jTFiRealitzacioE.setEditable(false);
                jTIniRealitzacioE.setEnabled(false);
                jTFiRealitzacioE.setEnabled(false); 
        }
        jScrollPaneE.setViewportView(jTableE);
        if(rondaEliminatoria!=null){
            if(prova.getEstat().equals(EstatProva.INICIAL.getEstat())&&jTNPreguntesE.isEnabled()){
                jTableE.setEnabled(true);        
            }else{
                jTableE.setEnabled(false);
            }        
        }
        
        
        
    }    
    /**
     * Acció que passa quan el nombre de preguntes d'una ronda final canvia
     * @param evt               Disparador que l'executa
     */
    private void jTNPreguntesFChange(java.awt.event.ActionEvent evt) {
        jTableF=null;
        if(jTNPreguntesF.getSelectedIndex()>=0){            
            jTableF= new JTable(carregarTaula(Integer.parseInt(jTNPreguntesF.getSelectedItem().toString())));                    
            if (jTNPreguntesF.isEnabled()&&jTNPreguntesF.isEditable()){
                jTIniRealitzacioF.setEnabled(true);
                jTFiRealitzacioF.setEnabled(true); 
                jTIniRealitzacioF.setEditable(true);
                jTFiRealitzacioF.setEditable(true);                
            }else{
                jTIniRealitzacioF.setEnabled(false);
                jTFiRealitzacioF.setEnabled(false); 
                jTIniRealitzacioF.setEditable(false);
                jTFiRealitzacioF.setEditable(false);                
            }
            
            
        }
        else{
             jTableF= new JTable(carregarTaula(0));
             jTIniRealitzacioF.setEnabled(false);
             jTFiRealitzacioF.setEnabled(false); 
             jTIniRealitzacioF.setEditable(false);
             jTFiRealitzacioF.setEditable(false);                
        }    
        jScrollPaneF.setViewportView(jTableF);
        if(rondaFinal!=null){
            if(prova.getEstat().equals(EstatProva.INICIAL.getEstat())&&jTNPreguntesF.isEnabled()){
                jTableF.setEnabled(true);        
            }else{
                jTableF.setEnabled(false);
            }
        }
        
    }
    /**
     * Acció que passa al cancelar una prova
     * @param evt               Disparador que l'executa
     * 
     */
    private void ActionCancelarProva(java.awt.event.ActionEvent evt)  {
        
        try{

            guardarProva();
            remotProves.clearProva(prova);
            
            JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("proves.pantalla.manteniment.optionmessage.provaborrada"), 
                    TDSLanguageUtils.getMessage("proves.pantalla.manteniment.optionmessage.confirmacio"), JOptionPane.INFORMATION_MESSAGE);                        

            prova=remotProves.getProva(prova.getIdProva());
            //
            if(prova.getRondaEliminatoria()!=null){
                if(prova.getRondaEliminatoria().getDataBaixa()==null){
                rondaEliminatoria=prova.getRondaEliminatoria();
                }
            }
            if (prova.getRondaFinal()!=null){
                if(prova.getRondaFinal().getDataBaixa()==null){
                    rondaFinal=prova.getRondaFinal();
                }    
            }
         carregarProva();
         habilitarControls(false);
         if(this.prova.getIdProva()==-1) ActionCrearProva2(null);
            
            
        }catch(Exception e){
            System.out.println(e.getMessage());
            JOptionPane.showMessageDialog(null, e.getMessage(), "ERR", JOptionPane.ERROR_MESSAGE);                                
        }
        
    }
    /**
     * Acció que passa al tancar la finestra
     * @param evt               Disparador que l'executa
     */
    private void tancarFinestra1(java.awt.event.ActionEvent evt) {
        
        this.dispose();
       
    }
    /**
     * Acció que passa al crear una prova. 
     * @param evt               Disparador que l'executa
     * @throws ParseException 
     */
    private void ActionCrearProva(java.awt.event.ActionEvent evt) throws ParseException {
        habilitarControls(true);
        borrarDades();
        prova=new Prova(-1,"");
        rondaEliminatoria=new RondaEliminatoria();
        rondaFinal=new RondaFinal();        
        prova.setEstat(EstatProva.INICIAL);        
        carregarProva();        
        ActionCrearProva2(evt);
        jTDescripcio.requestFocus();
        
    }
    /**
     * Acció que passa quan es busca una prova
     * @param evt           Disparador que l'executa
     */
    private void ActionBuscador(java.awt.event.ActionEvent evt){
        PanelBuscadorProves buscador=new PanelBuscadorProves(usuari,remotProves);
        buscador.setLocationRelativeTo(null);
        buscador.setVisible(true);
        this.dispose();
    }
    /**
     * Acció que passa quan s'edita una prova
     * @param evt               Disparador que l'executa
     */
    private void ActionCrearProva2(java.awt.event.ActionEvent evt) {
        habilitarControls(true);
        if(rondaEliminatoria!=null) jTableE.setEnabled(true);
        if(rondaFinal!=null) jTableF.setEnabled(true);
        if (prova.getIdProva()==-1) {
            jBCancelarProva.setEnabled(false);
            jMenuItemBorrar.setEnabled(false);
        }else {
            jBCancelarProva.setEnabled(true);
            jMenuItemBorrar.setEnabled(true);
        }
        jBCrearProva2.setEnabled(false);
        jMenuItemEditar.setEnabled(false);
        
        if(jTDescripcio.getText().equals("")){
            jBGuardarProva.setEnabled(false);
            jMenuItemGuardar.setEnabled(false);
        }
        else{
            if(prova.getEstat().equals(EstatProva.INICIAL.getEstat())&& jTNombrePlaces.getSelectedIndex()>-1){
                jBGuardarProva.setEnabled(true);
                jMenuItemGuardar.setEnabled(true);
            }
        }
        jTDescripcio.requestFocus();
    }   
    /**
     * Acció que passa al guardar una prova
     * @param evt           Disparador que l'executa
     */
    private void ActionGuardarProva(java.awt.event.ActionEvent evt) {                                              
        //deixo per bé
        try{
            
            
            guardarProva();
            Integer idProva= remotProves.setProva(prova); 
            
            JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("proves.pantalla.manteniment.optionmessage.provaguardada"), 
                    TDSLanguageUtils.getMessage("proves.pantalla.manteniment.optionmessage.confirmacio"), JOptionPane.INFORMATION_MESSAGE);                        
            prova.setIdProva(idProva);
            
            //borrarDades();
            carregarProva();
            
        }catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage(), 
                    "ERR", JOptionPane.ERROR_MESSAGE);    
                
                 
        }
        
    }    
    /**
     * Procediment que carrega el panell d'una ronda
     * @param panel                 panell contenidor
     * @param jScroll               Scroll contenidor
     * @param jLNPreguntes          Etiqueta
     * @param jTNPreguntes          Camp combinat on per guardar el número de preguntes
     * @param jLEsborrada           Etiqueta
     * @param jLModificada          Etiqueta
     * @param jLRealitzacio         Etiqueta
     * @param jLde                  Etiqueta
     * @param jTIniRealitzacio      Camp on es guarda la data d'inici de realització
     * @param jLFins                Etiqueta
     * @param jTFiRealitzacio       Camp on es guarda la data final de realització 
     * @param jTModificada          Camp on es guarda la data de modificació
     * @param jTEsborrada           Camp on es guarda la data Esborrada
     * @throws ParseException 
     */
    private void setPanellRonda(JPanel panel, JScrollPane jScroll, JLabel jLNPreguntes,
                                       JComboBox jTNPreguntes,JLabel jLEsborrada, JLabel jLModificada,
                                       JLabel jLRealitzacio, JLabel jLde, JTextField jTIniRealitzacio,
                                       JLabel jLFins, JTextField jTFiRealitzacio, JLabel jTModificada,
                                       JLabel jTEsborrada) throws ParseException{       
      javax.swing.GroupLayout jPanelEliminatoriaLayout = new javax.swing.GroupLayout(panel);
        panel.setLayout(jPanelEliminatoriaLayout);
        jPanelEliminatoriaLayout.setHorizontalGroup(
            jPanelEliminatoriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
           .addGroup(jPanelEliminatoriaLayout.createSequentialGroup()
            .addGap(7, 7, 7)
                .addComponent(jScroll, javax.swing.GroupLayout.PREFERRED_SIZE,330, javax.swing.GroupLayout.PREFERRED_SIZE)
               .addContainerGap(10,Short.MAX_VALUE)) 
                .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanelEliminatoriaLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanelEliminatoriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanelEliminatoriaLayout.createSequentialGroup()
                        .addComponent(jLNPreguntes)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTNPreguntes, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(jPanelEliminatoriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLEsborrada, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLModificada, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(jPanelEliminatoriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jTEsborrada, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jTModificada, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)))    
                    .addGroup(jPanelEliminatoriaLayout.createSequentialGroup()
                        
                        .addComponent(jLRealitzacio, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLde, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(4, 4, 4)
                        .addComponent(jTIniRealitzacio, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
                       // .addGap(4, 4, 4)
                        .addComponent(jLFins, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(4, 4, 4)
                        .addComponent(jTFiRealitzacio, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE))))
                        
              /*  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanelEliminatoriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    //.addComponent(jTFiRealitzacioE, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jTModificada)
                    .addComponent(jTEsborrada)))*/
        );/* .addComponent(jTModificada, javax.swing.GroupLayout.PREFERRED_SIZE, 80, Short.MAX_VALUE)
                    .addComponent(jTEsborrada, javax.swing.GroupLayout.PREFERRED_SIZE, 80, Short.MAX_VALUE)))*/
        jPanelEliminatoriaLayout.setVerticalGroup(
            jPanelEliminatoriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelEliminatoriaLayout.createSequentialGroup()
                .addGroup(jPanelEliminatoriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)                
                    .addGroup(jPanelEliminatoriaLayout.createSequentialGroup()
                        .addGroup(jPanelEliminatoriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLNPreguntes)
                            .addComponent(jTNPreguntes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLModificada))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLEsborrada))
                
                    .addGroup(jPanelEliminatoriaLayout.createSequentialGroup()
                        .addComponent(jTModificada, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTEsborrada, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(10, 10, 10)
                        .addGroup(jPanelEliminatoriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            
                            .addComponent(jTFiRealitzacio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLFins)
                            .addComponent(jTIniRealitzacio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLde)
                            
                            .addComponent(jLRealitzacio))))
                .addGap(18, 18, 18)
                .addComponent(jScroll, javax.swing.GroupLayout.DEFAULT_SIZE, 150, Short.MAX_VALUE))
        );
      
    } 
    
    
    /**
     * Procediment que carrega el panell on estan situats els botons d'acció
     */
    private void setPanellBotons(){
        jBCrearProva.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jBCrearProva.setMaximumSize(new java.awt.Dimension(60, 60));
        jBCrearProva.setMinimumSize(new java.awt.Dimension(60, 60));        
        jBCrearProva.setPreferredSize(new java.awt.Dimension(60, 60));
        jBCrearProva.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        
        jBCrearProva2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jBCrearProva2.setMaximumSize(new java.awt.Dimension(60, 60));
        jBCrearProva2.setMinimumSize(new java.awt.Dimension(60, 60));        
        jBCrearProva2.setPreferredSize(new java.awt.Dimension(60, 60));
        jBCrearProva2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        
        jBCancelarProva.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jBCancelarProva.setMaximumSize(new java.awt.Dimension(60, 60));
        jBCancelarProva.setMinimumSize(new java.awt.Dimension(60, 60));        
        jBCancelarProva.setPreferredSize(new java.awt.Dimension(60, 60));
        jBCancelarProva.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        
        jBBuscarProva.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jBBuscarProva.setMaximumSize(new java.awt.Dimension(60, 60));
        jBBuscarProva.setMinimumSize(new java.awt.Dimension(60, 60));        
        jBBuscarProva.setPreferredSize(new java.awt.Dimension(60, 60));
        jBBuscarProva.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        
        jBGuardarProva.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jBGuardarProva.setMaximumSize(new java.awt.Dimension(60, 60));
        jBGuardarProva.setMinimumSize(new java.awt.Dimension(60, 60));        
        jBGuardarProva.setPreferredSize(new java.awt.Dimension(60, 60));
        jBGuardarProva.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        
        jBSortir.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jBSortir.setMaximumSize(new java.awt.Dimension(60, 60));
        jBSortir.setMinimumSize(new java.awt.Dimension(60, 60));        
        jBSortir.setPreferredSize(new java.awt.Dimension(60, 60));
        jBSortir.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        
        
        GroupLayout jPButtonsLayout = new GroupLayout(jPButtons);
        jPButtons.setLayout(jPButtonsLayout);
        jPButtonsLayout.setHorizontalGroup(
            jPButtonsLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(jPButtonsLayout.createSequentialGroup()
                .addContainerGap()
                // .addComponent(jBSortir, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jBCrearProva, GroupLayout.PREFERRED_SIZE, ampleBoto, GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jBCrearProva2, GroupLayout.PREFERRED_SIZE, ampleBoto, GroupLayout.PREFERRED_SIZE)
                 .addGap(20, 20, 20)
                .addComponent(jBCancelarProva, GroupLayout.PREFERRED_SIZE, ampleBoto, GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jBGuardarProva, GroupLayout.PREFERRED_SIZE, ampleBoto, GroupLayout.PREFERRED_SIZE)
                .addGap(50, 50, 50)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jBBuscarProva, GroupLayout.PREFERRED_SIZE, ampleBoto, GroupLayout.PREFERRED_SIZE)
                .addGap(225,225,225)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jBSortir, GroupLayout.PREFERRED_SIZE, ampleBoto, GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                
                
                //.addGap(367, 367, 367)
                )
        );
        jPButtonsLayout.setVerticalGroup(
            jPButtonsLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(jPButtonsLayout.createSequentialGroup()
                .addGroup(jPButtonsLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(jBCrearProva, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 60, Short.MAX_VALUE)
                    .addComponent(jBCrearProva2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 60, Short.MAX_VALUE)
                    .addComponent(jBCancelarProva, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 60, Short.MAX_VALUE)
                    .addComponent(jBGuardarProva, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 60, Short.MAX_VALUE)
                    .addComponent(jBBuscarProva, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 60, Short.MAX_VALUE)                    
                    .addComponent(jBSortir, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 60, Short.MAX_VALUE))

                .addContainerGap())
        );

    }
    /**
     * Procediment que carrega els menus
     */
    private void setPanellMenu(){

        jMenuItemSortir.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemSortir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tancarFinestra1(evt);
            }
        });        
        jMenuArxiu.add(jMenuItemSortir);
            
        jMenuItemNova.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemNova.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
               try {
                    ActionCrearProva(evt);
                } catch (ParseException ex) {
                    
                }
            }
        });        
        jMenuEdicio.add(jMenuItemNova);

        jMenuItemEditar.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_E, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemEditar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {               
                ActionCrearProva2(evt);
               
            }
        });        
        jMenuEdicio.add(jMenuItemEditar);
        jMenuEdicio.add(separador1);
        
        jMenuItemBorrar.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemBorrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {               
                ActionCancelarProva(evt);
               
            }
        });
        jMenuEdicio.add(jMenuItemBorrar);
        
        jMenuItemGuardar.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_G, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {               
                ActionGuardarProva(evt);
               
            }
        });
        jMenuEdicio.add(jMenuItemGuardar);
        jMenuEdicio.add(separador2);
        
        jMenuItemBuscar.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_B, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {               
                ActionBuscador(evt);  
               
            }
        });
        jMenuEdicio.add(jMenuItemBuscar);
        
        jPanellMenu.add(jMenuArxiu);
        jPanellMenu.add(jMenuEdicio);
        
                    
        jMenuEdicio.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.menu.edicio"));
        jMenuArxiu.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.menu.arxiu"));
        jMenuItemNova.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.menu.itemnova"));
        jMenuItemEditar.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.menu.itemeditar"));
        jMenuItemBorrar.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.menu.itemborrar"));
        jMenuItemGuardar.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.menu.itemguardar"));
        jMenuItemBuscar.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.menu.itembuscar"));
        jMenuItemSortir.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.menu.itemsortir"));
        
        
        setJMenuBar(jPanellMenu);
    }
            
    /**
     * Procediment que carrega els atributs d'una prova
     */
    private void setPanellProva(){
        GroupLayout jPanelProvaLayout = new GroupLayout(jPanelProva);
        jPanelProva.setLayout(jPanelProvaLayout);
        
        //horitzontal panelProva
        jPanelProvaLayout.setHorizontalGroup(
            jPanelProvaLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(jPanelProvaLayout.createSequentialGroup()
                .addGroup(jPanelProvaLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addGroup(jPanelProvaLayout.createSequentialGroup()
                        .addComponent(jLDescripcio, GroupLayout.PREFERRED_SIZE, 80, GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTDescripcio, GroupLayout.PREFERRED_SIZE, 393, GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jLNombrePlaces, GroupLayout.PREFERRED_SIZE, 80, GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTNombrePlaces, GroupLayout.PREFERRED_SIZE,ampleCombo, GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED))
                        //.addComponent(jLEstatLabel, GroupLayout.PREFERRED_SIZE, 80, GroupLayout.PREFERRED_SIZE)
                        //.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                        //.addComponent(jLEstat, GroupLayout.PREFERRED_SIZE, 149, GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanelProvaLayout.createSequentialGroup()
                        .addGroup(jPanelProvaLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                            .addGroup(jPanelProvaLayout.createSequentialGroup()
                                .addGap(1, 1, 1)
                                .addComponent(jLInscripcio, GroupLayout.PREFERRED_SIZE, 114, GroupLayout.PREFERRED_SIZE))
                            .addGroup(jPanelProvaLayout.createSequentialGroup()
                                .addGap(16, 16, 16)
                                .addComponent(jLDataAlta, GroupLayout.PREFERRED_SIZE, 68, GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTextDataAlta, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanelProvaLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                            .addGroup(jPanelProvaLayout.createSequentialGroup()
                                .addComponent(jLDataModificacio, GroupLayout.PREFERRED_SIZE, 124, GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTextDataModificacio, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE)
                                .addGap(1, 1, 1)
                                .addComponent(jLDataBaixa, GroupLayout.PREFERRED_SIZE, 124, GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTextDataBaixa, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE))
                            .addGroup(jPanelProvaLayout.createSequentialGroup()
                                .addComponent(jLInscripcioDe, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTIniInscripcio, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE)
                                .addGap(1, 1, 1)
                                .addComponent(jLInscripcioFins, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTFiInscripcio, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE)))))
                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        //vertical panelProva
        jPanelProvaLayout.setVerticalGroup(
            jPanelProvaLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(jPanelProvaLayout.createSequentialGroup()
                .addGroup(jPanelProvaLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(jLDescripcio)
                    .addComponent(jTDescripcio, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLNombrePlaces)
                    .addComponent(jTNombrePlaces, GroupLayout.PREFERRED_SIZE, altCombo, GroupLayout.PREFERRED_SIZE))                   
                .addGap(11, 11, 11)
                .addGroup(jPanelProvaLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(jLInscripcio)
                    .addComponent(jLInscripcioDe)
                    .addComponent(jTIniInscripcio, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLInscripcioFins)
                    .addComponent(jTFiInscripcio, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanelProvaLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextDataAlta, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextDataBaixa, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLDataAlta)
                    .addComponent(jLDataBaixa)
                    .addComponent(jTextDataModificacio, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLDataModificacio)))
        );

    }
    /**
     * Procediment que distribueix els diferents panells que componen la pantalla
     */
    private void setFinestra(){
        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                     .addComponent(jPButtons, GroupLayout.PREFERRED_SIZE, 300, Short.MAX_VALUE)//800
                    //.addComponent(jPButtons, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jPanelProva, 0, 700, Short.MAX_VALUE))//800
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jPanelEliminatoria, GroupLayout.PREFERRED_SIZE, 375, GroupLayout.PREFERRED_SIZE)
                        //.addComponent(jPanelEliminatoria, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jPanelFinal, GroupLayout.PREFERRED_SIZE, 375, GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
                
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPButtons, GroupLayout.PREFERRED_SIZE, 70, GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanelProva, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
                    .addComponent(jPanelEliminatoria, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanelFinal, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        
        
    }
    /**
     * Acció que passa al tancar la finestra activa
     * @param evt 
     */
    private void tancarFinestra(WindowEvent evt){
          dispose();
         
      }
    /**
     * OPeració que esborra totes les dades d'una prova a nivell gràfic
     */
    private void borrarDades(){
         jPanelProva.setBorder(BorderFactory.createTitledBorder(null,TDSLanguageUtils.getMessage("proves.pantalla.manteniment.titoltext.jPanelProva1"),
                                             TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, fontCapa));                                     
         jTDescripcio.setText(""); 
         jTFiInscripcio.setText(""); 
         jTIniInscripcio.setText("");    
         jTIniRealitzacioE.setText(""); 
         jTIniRealitzacioF.setText("");
         jTFiRealitzacioE.setText(""); 
         jTFiRealitzacioF.setText("");    
         jTEsborradaE.setText(""); 
         jTEsborradaF.setText("");
         jTModificadaE.setText(""); 
         jTModificadaF.setText("");
         jTextDataAlta.setText(""); 
         jTextDataBaixa.setText(""); 
         jTextDataModificacio.setText("");         
         jTNombrePlaces.setSelectedIndex(-1);        
         jTNPreguntesE.setSelectedIndex(-1);
         jTNPreguntesF.setSelectedIndex(-1);         
         jBCancelarProva.setEnabled(false);
         jMenuItemBorrar.setEnabled(false);
         jBCrearProva2.setEnabled(false);
         jMenuItemEditar.setEnabled(false);
         jBGuardarProva.setEnabled(false);        
         jMenuItemGuardar.setEnabled(false);
//         jBCancelarProva.setEnabled(false);
//         jBCrearProva2.setEnabled(false);
             
    }
    /**
     * Operació que habilita/deshabilita els camps segons convingui
     * @param editable              Cert habilita, fals deshabilita
     */
    private void habilitarControls(boolean editable){        
            jBCrearProva.setEnabled(true);
             jMenuItemNova.setEnabled(true);
             jBSortir.setEnabled(true);
             jMenuItemSortir.setEnabled(true);             
              jBCancelarProva.setEnabled(false);
             jMenuItemBorrar.setEnabled(false);             
             jBGuardarProva.setEnabled(false);                      
             jMenuItemGuardar.setEnabled(false);
             jBCrearProva2.setEnabled(true); 
             jMenuItemEditar.setEnabled(true);

        if(prova.getEstat().equals(EstatProva.INICIAL.getEstat())){
             jTDescripcio.setEditable(editable);
             jTFiInscripcio.setEditable(editable); 
             jTIniInscripcio.setEditable(editable);    
             jTNombrePlaces.setEnabled(editable); 
             jTNPreguntesF.setEnabled(false);
             jTNPreguntesE.setEnabled(false);
             
                         
        }else{
             jTDescripcio.setEditable(false);
             jTFiInscripcio.setEditable(false); 
             jTIniInscripcio.setEditable(false);    
             jTNombrePlaces.setEnabled(false);            
             jBCrearProva.setEnabled(true);
             jBSortir.setEnabled(true);
             
             jBCrearProva2.setEnabled(false);             
             jMenuItemEditar.setEnabled(false);
             jTNPreguntesE.setEnabled(false);
             jTNPreguntesF.setEnabled(false);
             jTIniRealitzacioE.setEditable(false);
             jTFiRealitzacioE.setEditable(false);
             jTIniRealitzacioF.setEditable(false);
             jTFiRealitzacioF.setEditable(false);
             jTableE.setEnabled(false);
             jTableF.setEnabled(false);
        }
             
         
    }
    /**
     * Operació que carrega una prova a nivell gràfic
     * @throws ParseException
     * @throws NullPointerException 
     */
    private void carregarProva() throws ParseException,NullPointerException{

        jPanelProva.setBorder(BorderFactory.createTitledBorder(null,TDSLanguageUtils.getMessage("proves.pantalla.manteniment.titoltext.jPanelProva")+" " +prova.getIdProva() + " ... ESTAT:"+prova.getEstat() ,
                                             TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, fontCapa));                                     
         
         setPanellRonda(jPanelEliminatoria,jScrollPaneE,jLNPreguntesE,jTNPreguntesE,jLEsborradaE, jLModificadaE,jLRealitzacioE, jLdeE, jTIniRealitzacioE,jLFinsE, jTFiRealitzacioE, jTModificadaE,jTEsborradaE);
         jTNPreguntesE.setModel(carregarCombo(minPreguntes,maxPreguntes));             

             jPanelEliminatoria.setBorder(BorderFactory.createTitledBorder(null,TDSLanguageUtils.getMessage("proves.pantalla.manteniment.titoltext.jPanelEliminatoriainnactiva"),
                                             TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, fontCapa));                                                

         setPanellRonda(jPanelFinal,jScrollPaneF,jLNPreguntesF,jTNPreguntesF,jLEsborradaF, jLModificadaF,jLRealitzacioF, jLdeEF, jTIniRealitzacioF,jLFinsF, jTFiRealitzacioF, jTModificadaF,jTEsborradaF);
         jTNPreguntesF.setModel(carregarCombo(minPreguntes,maxPreguntes));


             jPanelFinal.setBorder(BorderFactory.createTitledBorder(null,TDSLanguageUtils.getMessage("proves.pantalla.manteniment.titoltext.jPanelFinalinnactiva"),
                                             TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, fontCapa));                                     

         
         jTDescripcio.setText(prova.getDescripcio());          
         //carregaHabilitada=false;
         jTNombrePlaces.setModel(carregarCombo(3,25));
         //carregaHabilitada=true;
         if (prova.getIdProva()!=-1){
            jTIniInscripcio.setText(EOlympicsUtils.getStringDate(prova.getDataIniInscripcio()));    
            jTFiInscripcio.setText(EOlympicsUtils.getStringDate(prova.getDataFiInscripcio()));             
            jTextDataAlta.setText(EOlympicsUtils.getStringDate(prova.getDataCreacio())); 
            jTextDataBaixa.setText(EOlympicsUtils.getStringDate(prova.getDataEsborrat())); 
            jTextDataModificacio.setText(EOlympicsUtils.getStringDate(prova.getDataModificacio()));            
            //carregaHabilitada=false;
           
                jTNombrePlaces.setSelectedItem(prova.getNombrePlaces());
          
            
            //carregaHabilitada=true;
         }else{
            jLEstat.setText(prova.getEstat());
            carregaHabilitada=false;
            jTNombrePlaces.setSelectedIndex(-1);
            carregaHabilitada=true ;
            jTextDataAlta.setText(""); 
            jTextDataBaixa.setText(""); 
            jTextDataModificacio.setText("");                
         }
         if(jTDescripcio.getText().equals("")){
             jBGuardarProva.setEnabled(false);
             jMenuItemGuardar.setEnabled(false);
         }else{
             if(prova.getEstat().equals(EstatProva.INICIAL.getEstat())) {
                 if(jTNombrePlaces.getSelectedIndex()> -1 ){
                     jBGuardarProva.setEnabled(true);
                     jMenuItemGuardar.setEnabled(true);
                 }                 
             }
             
         }           
    }
    
    /**
     * Operació que guarda una prova 
     * @throws EOlympicsException 
     */    
    private void guardarProva() throws EOlympicsException{
        
        try{            
            prova.setDescripcio(jTDescripcio.getText());
            prova.setDataIniInscripcio(EOlympicsUtils.getDate(jTIniInscripcio.getText()));
            prova.setDataFiInscripcio(EOlympicsUtils.getDate(jTFiInscripcio.getText()));
            prova.setNombrePlaces(jTNombrePlaces.getSelectedIndex()+3);        
            
            if(rondaEliminatoria!=null){                
                rondaEliminatoria.setNombrePreguntes(jTNPreguntesE.getSelectedIndex()+3);
                rondaEliminatoria.setDataIniRealitzacio(EOlympicsUtils.getDate(jTIniRealitzacioE.getText()));
                rondaEliminatoria.setDataFiRealitzacio(EOlympicsUtils.getDate(jTFiRealitzacioE.getText()));
                rondaEliminatoria.setUsuariAlta(usuari);
                rondaEliminatoria.setUsuariBaixa(usuari);
                rondaEliminatoria.setUsuariModificacio(usuari);                
                List<PreguntaResposta> pr=getPreguntesRonda("E");
                if(pr.size()!= rondaEliminatoria.getNombrePreguntes()){
                    throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_NOMBRE_PREGUNTES"));
                }                
                rondaEliminatoria.setRespostesRonda(pr); 
                prova.setRondaEliminatoria(rondaEliminatoria);
            }else{
                prova.setRondaEliminatoria(null);
            }
            
            if(rondaFinal!=null){
                rondaFinal.setNombrePreguntes(jTNPreguntesF.getSelectedIndex()+3);
                rondaFinal.setDataIniRealitzacio(EOlympicsUtils.getDate(jTIniRealitzacioF.getText()));
                rondaFinal.setDataFiRealitzacio(EOlympicsUtils.getDate(jTFiRealitzacioF.getText()));
                rondaFinal.setUsuariAlta(usuari);
                rondaFinal.setUsuariBaixa(usuari);
                rondaFinal.setUsuariModificacio(usuari);
                List<PreguntaResposta> pr=getPreguntesRonda("F");
                if(pr.size()!= rondaFinal.getNombrePreguntes()){
                    throw new EOlympicsException(TDSLanguageUtils.getMessage("ERR_NOMBRE_PREGUNTES"));
                }                
                rondaFinal.setRespostesRonda(pr);
                prova.setRondaFinal(rondaFinal);
            }else{
                prova.setRondaFinal(null);
            }
            
            prova.setUsuariCreacio(usuari);
            prova.setUsuariModificacio(usuari);
            prova.setUsuariEsborrat(usuari);
            
        }catch (NullPointerException npe){
            System.out.println(npe.getMessage());
            throw new EOlympicsException(EOlympicsException.ERR_DATE);            
        }catch (ParseException pe){
            System.out.println(pe.getMessage());
            throw new EOlympicsException(EOlympicsException.ERR_DATE);        
        }
    }

    /*
     * OPeració que personalitza l'idioma de les etiquetes de la pantalla.
     */
    private void pintarEtiquetes(){        
        
        jBCrearProva.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.crearprova"));
        
        jBCrearProva.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/BotoNou.png"))); // NOI18N
        
        jBCrearProva.setToolTipText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.tooltip.crearprova"));                
        
        jBCancelarProva.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.borrarprova"));       
        jBCancelarProva.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/BotoBorrar.png"))); // NOI18N
        jBCancelarProva.setToolTipText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.tooltip.borrarprova"));
        jBCrearProva2.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.editarprova"));        
        jBCrearProva2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/BotoModificar.png"))); // NOI18N
        jBCrearProva2.setToolTipText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.tooltip.editarprova"));
        jBGuardarProva.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.guardarprova"));      
        jBGuardarProva.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/BotoGuardar.png"))); // NOI18N
        jBGuardarProva.setToolTipText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.tooltip.guardarprova"));
        jBBuscarProva.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.buscarprova"));        
        jBBuscarProva.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/BotoCercar.png"))); // NOI18N
        jBBuscarProva.setToolTipText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.tooltip.buscarprova"));

        jBSortir.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.sortirprova"));        
        jBSortir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/BotoSortir.png"))); // NOI18N
        jBSortir.setToolTipText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.tooltip.sortirprova"));
        
        jLDataAlta.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLDataAlta"));
        jLDataBaixa.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLDataBaixa"));
        jLDataModificacio.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLDataModificacio"));
        jLDescripcio.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLDescripcio"));
        jLEsborradaE.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLEsborradaE"));
        jLEsborradaF.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLEsborradaF"));

        jLFinsE.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLFinsE"));
        jLFinsF.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLFinsF"));
        jLInscripcio.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLInscripcio"));
        jLInscripcioDe.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLInscripcioDe"));
        jLInscripcioFins.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLInscripcioFins"));
        jLModificadaE.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLModificadaE"));
        jLModificadaF.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLModificadaF"));
        jLNPreguntesE.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLNPreguntesE"));
        jLNPreguntesF.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLNPreguntesF"));
        jLNombrePlaces.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLNombrePlaces"));
        jLRealitzacioE.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLRealitzacioE"));
        jLRealitzacioF.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLRealitzacioF"));
        jLdeE.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLdeE"));
        jLdeEF.setText(TDSLanguageUtils.getMessage("proves.pantalla.manteniment.settext.jLdeEF"));        
        
    }
    
    /**
     * OPeració que carrega un camp combinat
     * @param min           Numero mínim del camp
     * @param max           Numero màxim del camp
     * @return              El model 
     */
    private DefaultComboBoxModel carregarCombo(Integer min, Integer max){        
        Integer[] n = new Integer[1+(max-min)];
        Integer j=0;
        for(int i=min; i<=max; i++) {n[j]=i; j++;}
        return new DefaultComboBoxModel(n);
    }

    
    /**
     * OPeració que carrega les preguntes d'una ronda
     * @param r             Ronda a carregar
     */
    private void carregarPreguntesRonda(Ronda r){
        
        for(PreguntaResposta pr:r.getRespostesRonda()){
            if(r instanceof RondaEliminatoria){                
                if(pr.getResposta().equals("A"))jTableE.getModel().setValueAt(true, pr.getPregunta()-1, 1);
                else if(pr.getResposta().equals("B"))jTableE.getModel().setValueAt(true, pr.getPregunta()-1, 2);
                else if(pr.getResposta().equals("C"))jTableE.getModel().setValueAt(true, pr.getPregunta()-1, 3);
                else if(pr.getResposta().equals("D"))jTableE.getModel().setValueAt(true, pr.getPregunta()-1, 4);
            }else if(r instanceof RondaFinal){
                if(pr.getResposta().equals("A"))jTableF.getModel().setValueAt(true, pr.getPregunta()-1, 1);
                else if(pr.getResposta().equals("B"))jTableF.getModel().setValueAt(true, pr.getPregunta()-1, 2);
                else if(pr.getResposta().equals("C"))jTableF.getModel().setValueAt(true, pr.getPregunta()-1, 3);
                else if(pr.getResposta().equals("D"))jTableF.getModel().setValueAt(true, pr.getPregunta()-1, 4);
            }                        
        }
    }
    /**
     * Accessor de lectura de les preguntes d'una ronda
     * @param r                     Tipus de ronda
     * @return 
     */
    private List<PreguntaResposta> getPreguntesRonda(String r){
            
            List <PreguntaResposta> respostes= new ArrayList <PreguntaResposta>();
            
            if(r.equals("E")){                
                for(int i= 0; i<jTableE.getModel().getRowCount();i++){                    
                    if(jTableE.getModel().getValueAt(i, 1).equals(true)) respostes.add(new PreguntaResposta(i+1,"A"));
                    else if(jTableE.getModel().getValueAt(i, 2).equals(true)) respostes.add(new PreguntaResposta(i+1,"B"));
                    else if(jTableE.getModel().getValueAt(i, 3).equals(true)) respostes.add(new PreguntaResposta(i+1,"C"));
                    else if(jTableE.getModel().getValueAt(i, 4).equals(true)) respostes.add(new PreguntaResposta(i+1,"D"));                    
                }
            }else if(r.equals("F")){
                for(int i= 0; i<jTableF.getModel().getRowCount();i++){                    
                    if(jTableF.getModel().getValueAt(i, 1).equals(true)) respostes.add(new PreguntaResposta(i+1,"A"));
                    else if(jTableF.getModel().getValueAt(i, 2).equals(true)) respostes.add(new PreguntaResposta(i+1,"B"));
                    else if(jTableF.getModel().getValueAt(i, 3).equals(true)) respostes.add(new PreguntaResposta(i+1,"C"));
                    else if(jTableF.getModel().getValueAt(i, 4).equals(true)) respostes.add(new PreguntaResposta(i+1,"D"));                    
                }
            }                        
        return respostes;
    }
    
}
